'use strict';

const semver = require('semver')
const colors = require('colors/safe')
const log = require('@as-cli-dev/log')
const LOWEST_NODE_VERSION = '12.0.0'

class Command {
    constructor(argv){
        if(!argv){
            throw new Error('参数不能为空')
        }
        if(!Array.isArray(argv)){
            throw new Error('参数必须是数组')
        }
        if(argv.length === 0){
            throw new Error('参数列表为空')
        }
        this._argv = argv
        let runner = new Promise((resolve,reject) => {
            let chain = Promise.resolve()
            chain = chain.then(() => this.checkNodeVersion())
            chain = chain.then(() => this.initArgs())
            chain = chain.then(() => this.init())
            chain = chain.then(() => this.exec())
            chain.catch(err => {
                log.error(err.message)
            })
        })
    }


    initArgs(){
        this._cmd = this._argv[this._argv.length - 1]
        this._argv = this._argv.slice(0,this._argv.length - 1)
        // console.log(this._cmd)
    }

    checkNodeVersion(){
        const currentVersion = process.version
        const lowestVersion = LOWEST_NODE_VERSION
        if(!semver.gt(currentVersion,lowestVersion)){
            throw new Error(colors.red(`as-cli-dev需要${lowestVersion}以上版本的Node.js`))
        }
    }

    init(){
        throw new Error('init必须实现')
    }
    exec(){
        throw new Error('exec必须实现')
    }
}


module.exports = Command;

